<?php
session_start();

# Định nghĩa Url gốc của ứng dụng
if (!defined('ROOT_URL')) {
    preg_match('/(.*)\/public\/index\.php$/', $_SERVER['SCRIPT_NAME'], $m);
    $m = $m[1] . '/';
    define('ROOT_URL', isset($_SERVER['HTTPS']) ? 'https://' : 'http://' . $_SERVER['HTTP_HOST'] . $m);
}

// Define constants
define('DS', DIRECTORY_SEPARATOR);
define('ROOT', dirname(dirname(__FILE__)) . DS);
define('CONFIG_DIR', ROOT . 'configs' . DS);
define('LIB_DIR', ROOT . 'library' . DS);
define('CONTROLLERS_DIR', ROOT . 'application' . DS . 'controllers' . DS);
define('MODELS_DIR', ROOT . 'application' . DS . 'models' . DS);
define('VIEWS_DIR', ROOT . 'application' . DS . 'views' . DS);
define('LOG_FILE', ROOT . 'temp' . DS . 'logs' . DS . 'debug-logs.txt');

require_once LIB_DIR . 'loader.class.php';
require_once LIB_DIR . 'app.class.php';
App::initialApp();

# Routing process
$request = isset($_GET['request']) ? $_GET['request'] : Loader::getConfig('routing', 'default_controller');
$request = rtrim($request, '/');
# Thực hiện thay thế
foreach (Loader::getConfig('routing', 'replacement') as $pattern => $replace) {
    $pattern = '#^' . $pattern . '$#i';
    $request = preg_replace($pattern, $replace, $request);
}

$request = explode('/', $request);

# Nhận về controller
$rController = $request[0];
array_shift($request);


if (count($request) > 0) {
    $rAction = $request[0];
    array_shift($request);
} else {
    $rAction = Loader::getConfig('routing', 'default_action');
}

if (count($request) > 0) {
    $rParams = implode('/', $request);
} else {
    $rParams = null;
}


if ($controller =& Loader::loadController($rController, $rAction)) {
    $controller->$rAction($rParams);
} else {
    if ($controller =& Loader::loadController($rController, $rAction)) {
        $controller->$rAction($rParams);
    } else {
        $action = Loader::getConfig('routing', 'default_action');
        if ($controller =& Loader::loadController($rController, $action)) {
            $controller->$action($rAction);
        } else {
            App::setException("Đường dẫn (URL) bạn yêu cầu không tồn tại [" . $_SERVER['REQUEST_URI'] . "]".
                " Vui lòng kiểm tra lại hoặc thông báo cho người quản lý nếu bạn nghĩ đây là 1 lỗi!",
                $_GET['request']);
        }
    }
}